#ifndef QSLOGDESTFUNCTOR_H
#define QSLOGDESTFUNCTOR_H

#include "QsLogDest.h"
#include <QObject>

namespace QsLogging
{
// 提供各种类型的函数式接收器。
// 这是一个高级目标类型。根据您的配置，LogFunction 可能从不同的线程甚至不同的二进制文件调用。
// 您不应该从 LogFunction 内部访问 QsLog，也不应该执行任何耗时的操作。
// logMessageReady 通过队列连接连接，不包括跟踪消息
class FunctorDestination : public QObject, public Destination
{
    Q_OBJECT
public:
    // 构造函数，接受函数指针
    explicit FunctorDestination(LogFunction f);
    // 构造函数，接受QObject和成员函数
    FunctorDestination(QObject *receiver, const char *member);

    // 写入日志消息到函数目标
    void write(const QString &message, Level level) override;
    // 检查函数目标是否有效
    bool isValid() override;

protected:
    // 使用 int 避免注册新的枚举类型
    Q_SIGNAL void logMessageReady(const QString &message, int level);

private:
    LogFunction mLogFunction;
};
}

#endif // QSLOGDESTFUNCTOR_H
